我的開發環境:
Rails 5.1以上
引入webpacker和vue
先安裝web packer1
gem 'webpacker', '~> 3.5'
$ bundle install$ bundle exec rails webpacker:install
可以查看webpacker帶有什麼指令:$ rails webpacker
比起npm我比較喜歡用yarn:$ bundle exec webpacker:yarn_install$ yarn install
有個指令可以直接安裝vue:$ bundle exec webpacker:install:vue
利用Attribute給 vue 資料
先在contoller設定變數:1
2
3def index
  @products = Product.all
end
再到view裡面把資料帶入DOM:1
2
3
4
5
6<% props = {
  products: @products
  }.to_json
%>
<div id="app" data="<%= props %>"></div>
接下來到vue的檔案application:1
2
3
4
5
6
7
8
9
10
11
12import Vue from 'vue'
import App from '../app.vue'
document.addEventListener('DOMContentLoaded', () => {
  const el = "#app"
  const props = JSON.parse($("#app")[0].getAttribute('data'))
  const app = new Vue({
    el: el,
    render: h => h(App, { props })
  })
})
最後到vue 的component:1
2
3
4
5
6
7
8
9
10
11
12
13<script>
export default {
  props: ["products"],
  data: function () {
    return {
      message: "Hello Vue!"
    }
  },
  mounted: function () {
    console.log("products", products)
  }
}
</script>
mounted是vue生成完之後會執行的動做,可以參考vue lifecycle。
如果有console出東西就ok嘍!!
這個方式的優點十分明顯,可以省去製作API和串接的麻煩,但就是比較不彈性,真正要做到完全的前後端分離建議還是分成兩個專案,Rails寫API而Vue去做前端實現。